Compilando el kernel en 8 Pasos.
Bien, en este pequeño manualito, veremos de una forma rapida y
sencilla el proceso de compilacion del Kernel en Linux.
Por si no lo sabes, el kernel es el "corazon" de cualquier Sistema
Operativo. asi, SunOS, *BSD, Linux, MS-DOS, Windows u otros sistemas
tienen un kernel que administra los recursos del sistema.
Una de las razones por las que GNU/Linux es uno de los sistemas mas
poderosos, es por constante actualizacion del kernel. "Actualizar el
nucleo (el kernel) es simple asunto de juntar las fuentes y compilarlo
uno mismo. Se debe compilar el nucleo por si mismo para activar o
desactivar ciertas funciones, ademas de asegurarse de que el nucleo
estara optimizado para correr en esa maquina. El proceso es casi
indoloro"1.
1-. Bien, lo primero que haremos sera descargarnos
las fuentes del kernel, lo podemos hacer entrando en www.kernel.org, de
donde podremos descargar el parche (Nota: Al referirse como parchar o
parche, no se refiere a "Corregir errores" o "Tapar hoyos", sino al echo
de actualizar sin tener que compilar TODO el nucleo), asi como el
codigo fuente completo del nucleo linux. Al momento de escribir estas
lineas, el kernel mas nuevo es el reciente Kernel 2.6.0.
2.- Una vez que ya tenemos las fuentes de nuestro
kernel lo descompactamos en "/usr/src/", como el kernel esta empaquetado
con dos diferentes metodos, mostraremos los dos:
linux-2.6.0.tar.bz2 ==========> # tar -xjvf
linux-2.6.0.tar.bz2 ó #bzip2 -d
linux-2.6.0.tar.bz2 | tar -xvf
linux-2.6.0.tar.gz ==========> # tar -xzvf
linux-2.6.0.tar.gz ó #gzip -d
linux-2.6.0.tar.gz | tar -xvf
3.- Esto nos generara una carpeta en donde se
encuentran las fuentes del kernel algo asi como "/usr/src/linux-2.6.0/",
podemos crear un enlace simbolico para nuestra carpeta, llamandolo
"linux" (/usr/src/linux), esto porque muchos programas se referiran a
las fuentes por /usr/src/linux/. De esta manera no tendremos que
cambiar el nombre del directorio. Lo haremos de la siguiente manera:
#ln -s /usr/src/linux-2.6.0/ /usr/src/linux
4.- En este momento, tenemos lo necesario para
empezar con la configuracion de nuestro kernel, asi que dentro de la
carpeta que contiene las fuentes ejecutaremos el comando "make" con la
variable "config","menuconfig" o "xconfig".
#make config ó
#make menuconfig ó
#make xconfig
Cualquiera de las tres opciones son para configurar
el kernel, y van de mas complicado a mas sencillo. Con "make config" se
nos haran preguntas sobre las opciones, todas y cada una de ellas acerca
de la configuracion del modulo (Nada recomendable, es un proceso mas
tardado de lo que imaginas) este proceso es en modo texto. "make
menuconfig" tambien es un proceso en modo texto, con la diferencia de
que aqui apreciaremos todo en un menu. Con "make xconfig" realizaremos
la configuracion del kernel en modo grafico --Solo si contamos con X--,
de todas esta es la opcion mas recomendada, pues es mas sencilla y
organizada.
La configuracion del kernel no la explicare, pues es
un proceso que cada quien lo tiene que realizar ajustanto el kernel a
sus necesidades. La recomendacion que puedo hacer es meter en el kernel
lo que es realmente necesario y que casi siempre se va a utilizar. El
kernel se carga completo desde un principio, asi que si metemos en el
kernel muchos modulos, se hara muy grande y nos consumira mas memoria y
ciclos del CPU. Ahora, tampoco es bueno dejarlo todo como modulo, si
dejamos como modulo por ejemplo la tarjeta de red en una computadora que
esta siempre conectada, el proceso de carga y descarga del modulo cada
vez que el dispositivo se utiliza ralentizaria nuestro kernel. Tambien
hay que tomar en cuenta ke no debemos poner como modulos cosas que
seran necesarias para booteo de nuestra maquina. Por ejemplo, si
estamos utilizando el sistema de ficheros Ext3 (Ext2 + Journaling), en
nuestro kernel lo marcamos como modulo, y nuestro kernel reside en una
particion Ext3, nuestro kernel sera incapaz de bootear por si solo (a
menos que utilices Initrd). Pues a la hora de intentar cargarse no podra
cargar el modulo (pues no tiene soporte para Ext3), no podra leer el
sistema de ficheros y por consiguiente, no podra Bootear.
En caso de que tu kernel no funcione a la primera
(Es normal que a la primera no nos quede el kernel como lo queremos),
debe haber sido porque en alguna de las opciones la marcaste con
"m"(modulo) o como "n"(no incluir ni en el kernel ni como modulo).
Recuerda siempre guardar el archivo de configuracion de tu kernel, pues
en caso de tener que reconfigurarlo, no tendras que partir desde cero.
5.- Ok, ya que tenemos configurado nuestro kernel, se
nos instara a que realizemos la compilacion del mismo, es un proceso
sencillo, y nuestro ordenador hara todo :), para ello ejecutaremos "make
dep" para generar las dependencias, "make clean" para limpiar de
anteriores binarios, y "make bzImage" para generar la imagen comprimida
del kernel. Para ahorrarnos tiempo, marquemoslo todo en la misma linea
de comando:
#make dep; make clean; make bzImage
En esto de la compilacion nos tardara un rato,
dependiendo de lo que le hayamos metido a nuestro kernel, asi como de la
velocidad de nuestro micro. Referencia: Tengo un procesador P4-M a 1.8
Ghz, tardó aproximadamente 15-20 mins cambiando solo algunos
parametros. En este momento podemos despegarnos de la computadora por un
minuto, tal vez para preparar lo que haremos mientras compilamos los
modulos ;-).
6.- Una vez compilado el kernel tendremos que
compilar todo lo que hayamos marcado como modulos. Este proceso es quiza
el mas tardado de todos, pues habra una buena cantidad de modulos que
compilar (a menos que sepas bien lo que necesitas y le hayas kitado
todos los innecesarios). Como ya habia dicho antes, es buen momento para
retirarse a tomar cafe, a platicar con alguien ver una pelicula o hacer
algo mas. Referencia: En mi maquina ha tardado algo asi de una hora
compilando los modulos, quite drivers innecesarios, soporte para
sistemas de ficheros que no utilizo, y algunos los mande al kernel.
Esto lo haremos con
#make modules
Una vez compilados los modulos, no se nos debe
olividar instalarlos en la carpeta de modulos correspondiente a nuestro
kernel, lo marcaremos con :
#make modules_install
7.- Realizando esto, ya tenemos todo lo que
necesitamos en binarios, no mas compilaciones (si todo salio bien). La
imagen comprimida de nuestro kernel se encuentra en la carpeta
"/usr/src/linux-2.6.0/arch/i386/boot/" (si fue compilado para i386). Lo
que haremos sera copiar el archivo bzImage a /boot/. Por seguridad
cambiemos el nombre.
#cp bzImage /boot/2.6.0
8.- Ya por ultimo tendremos que ajustar nuestro
gestor de arranque para que bootee con el nuevo kenel, en LiLo seria
algo asi:
image=/boot/vmlinuz
label="linux"
root=/dev/hda8
*initrd=/boot/initrd.img
*append="quiet devfs=mount
acpi=off"
*vga=788
read-only
Nota: Los marcados con * son extra, he tomado esta
configuracion de mi lilo.conf
No es para nada recomendable, es mas seria algo
"estupido", borrar la imagen del kernel anterior en /boot/, o eliminarla
de nuestro gestor de arranque, pues, si por alguna razon nuestro kernel
no es capaz de bootear, lo necesitaremos para corregir los errores. A
menos que estemos COMPLETAMENTE SEGUROS de que nuestro kernel si
funciona bien
Nota: Los marcados con * son extra, he tomado esta
configuracion de mi lilo.conf
No es para nada recomendable, es mas seria algo
"estupido", borrar la imagen del kernel anterior en /boot/, o eliminarla
de nuestro gestor de arranque, pues, si por alguna razon nuestro kernel
no es capaz de bootear, lo necesitaremos para corregir los errores. A
menos que estemos COMPLETAMENTE SEGUROS de que nuestro kernel si
funciona bien.
------------------------------------------
------------------------------------------
Copyright (C) 2004 Marco Antonio Islas Cruz
Permision is granted to copy, distribute and/or midify this document
under the therms os the GNU Free Documentations License, Version 1.1
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts. http://www.gnu.org/copyleft/fdl.html